/**
 * 在指定分钟数后触发主动消息
 *
 * @param {number} minutes - 延迟的分钟数
 */
function activeMessageAfterMinutes(minutes) {
	/**
	 * 计算延迟执行的时间
	 */
	const delay = DelayExecutionManager.calculateDelayTime(minutes);
	// 如果全局约束执行器未初始化，则进行初始化
	if (!window.constraintExecutions) {
		// 初始化全局约束执行器
		window.constraintExecutions = new ConstraintExecution(
			30,
			3,
			async () => {
				/**
				 * 获取主动消息的Markdown内容
				 */
				const markdown = await fetchMarkdown('./prompt/activeMessage.md');
				// 若开发者模式开启，则渲染< 动态提示词 >
				if (isDeveloperMode) {
					/**
					 * 渲染< 动态提示词 >
					 */
					const messageElement = tracelessRenderMessage('<think>\n' + markdown + '\n</think>', chatHistoryPanel);
					// 为think区块添加折叠功能
					messageElement?.querySelectorAll(".toggle_think_button").forEach(bindFoldingButton);
				};
				// 从API加载对话内容
				await loadConversationFromAPI(chatHistoryPanel, markdown);
				// 设置超时状态为用户输入状态
				setStateWithTimeout(EmotionalState.AWAIT);
			},
			// 当执行受限时，显示系统提示消息
			() => showSystemMessage("阁下是不是没空搭理月华呀? 那我就在旁边乖乖等你啦", "error")
		);
	};
	// 调用延迟执行管理器，在指定延迟时间后运行约束执行器
	DelayExecutionManager.call("主动延续话题", () => window.constraintExecutions.run(), delay);
};

/**
 * 重新绘制图表相关操作
 *
 * @param {string} type - 图表类型
 *
 * @param {string} message - 相关消息
 */
async function chartRedrawing(type, message) {
	// 如果全局图表重绘约束执行器未初始化，则进行初始化
	if (!window.chartRedrawConstraint) {
		// 初始化全局约束执行器
		window.chartRedrawConstraint = new ConstraintExecution(
			5,
			3,
			async (type, message) => {
				/**
				 * 获取图表重绘的Markdown内容
				 */
				let markdown = await fetchMarkdown('./prompt/chartRedrawing.md');
				// 替换Markdown中的占位符
				markdown = markdown.replace(/{type}/g, type).replace(/{message}/g, message);
				// 若开发者模式开启，则渲染< 动态提示词 >
				if (isDeveloperMode) {
					/**
					 * 渲染< 动态提示词 >
					 */
					const messageElement = tracelessRenderMessage('<think>\n' + markdown + '\n</think>', chatHistoryPanel);
					// 为think区块添加折叠功能
					messageElement?.querySelectorAll(".toggle_think_button").forEach(bindFoldingButton);
				};
				// 从API加载对话内容
				await loadConversationFromAPI(chatHistoryPanel, markdown);
				// 设置超时状态为用户输入状态
				setStateWithTimeout(EmotionalState.AWAIT);
			},
			async () => {
				/**
				 * 获取道歉消息的Markdown内容
				 */
				const markdown = await fetchMarkdown('./prompt/apologyMessage.md');
				// 若开发者模式开启，则渲染< 动态提示词 >
				if (isDeveloperMode) {
					/**
					 * 渲染< 动态提示词 >
					 */
					const messageElement = tracelessRenderMessage('<think>\n' + markdown + '\n</think>', chatHistoryPanel);
					// 为think区块添加折叠功能
					messageElement?.querySelectorAll(".toggle_think_button").forEach(bindFoldingButton);
				};
				// 从API加载对话内容
				await loadConversationFromAPI(chatHistoryPanel, markdown);
				// 设置超时状态为用户输入状态
				setStateWithTimeout(EmotionalState.AWAIT);
			}
		);
	}
	// 如果输入按钮被禁用，则不执行后续逻辑
	if (getInputButtonsDisabledState()) return;
	// 延迟3秒执行图表重绘约束执行器
	await new Promise(resolve => setTimeout(resolve, 3000));
	// 运行图表重绘约束执行器
	window.chartRedrawConstraint.run(type, message);
};
